『Clean Code』
https://gyazo.com/41425e3b532c7c89d8d84fb9f08ababc
序盤が原則、パターンなどの知識系
中盤からケーススタディに入る
使用言語はJava
だからOOPが前提にある話も多い
逆にプログラミング入門初期に読んでも面白くなさそう
コードに色がついていないので読みづらい
typescriptのやつ
長いmrsekut.icon*2
前書き
序論
カバーの絵について
第1章 クリーンコード
後でやる、は、やらないに等しい
第2章 意味のある名前
エンコーディングを避ける
「エンコーディング」が何を指しているのかわからない #?? 第3章 関数
根拠が薄いが、再利用性を根拠にしてない点は好感が持てるmrsekut.icon
switch文
複数のclassを作って、ポリモーフィズムることで解決する
hsなら型を使ってもっと良い感じに対応できるのもあるのにな、と読んでて思う箇所はいくつかあったmrsekut.icon
コメントで、ダメなコードを取り繕うことはできない
自分自身をコードの中で説明する
よいコメント
よくないコメント
参考文献
第5章 書式化
縦方向の書式化
横方向の書式化
チームの規則
アンクルボブの書式化規則
第6章 オブジェクトとデータ構造
データ構造とオブジェクト
データ構造を使う
新たな振る舞いを追加する際に、既存のデータ構造に影響を与えない
関数を新しく追加してその中でパターンマッチする
一方で、新たなデータ構造を追加すると、既存の振る舞い全てに追加実装が必要
パターンマッチが漏れているところを全部直す
オブジェクトを使う
新たなデータを追加する時に、既存のclassに影響を与えない
新たなclassを定義するだけ
一方で、新たな振る舞いを追加すると、既存のclass全てに追加実装が必要
全てのclassに同名のmethodを生やして回る
本では触れられてないけど型クラスを使うとこのトレードオフを両方解決できるなmrsekut.icon
と、同時にこれわざわざ指摘するほどの問題点なのだろうかとも感じる
第7章 エラー処理
最初にtry-catch-finally文を書く
非チェック例外を使用する
例外で状況を伝える
呼び出し元が必要とする例外クラスを定義する
正常ケースのフローを定義する
nullを返さない
nullを渡さない
結論
参考文献
第8章 境界
カプセル化の話だった
テストをきれいに保つ
クリーンテスト
1つのテストに1つのアサート
F.I.R.S.T.
結論
参考文献
第10章 クラス
OOPをやる分には有用な内容だったmrsekut.icon*2
第11章 システム
あなたは、街をどうやって造りますか?
システムを使うことと、構築することとを分離する
スケールアップ
横断的関心事
Javaプロキシ
Pure JavaのAOPフレームワーク
AspectJアスペクト
システムアーキテクチャのテスト実行
意思決定を最適化する
論証可能な価値を追加する際には、標準を賢く使用する
システムはドメイン特化言語を必要とする
結論
参考文献
第12章 創発
内容が薄い
第13章 同時並行性
なぜ同時並行性が必要なのか?
難問
同時並行性防御原則
使用しているライブラリを知る
スレッドセーフなコレクション
実行モデルを見分ける
同期化メソッド間の依存関係に注意
同期化セクションを小さくする
正確な終了処理コードを書くのは難しい
スレッド化されたコードのテスト
結論
参考文献
第14章 継続的改良
Argsの実装
Argsクラス。大雑把な下書き
文字列引数
結論
JUnitフレームワーク
結論
第16章 SerialDateのリファクタリング
まずは、動作するようにする
そして正しく直した
結論
参考文献
第17章 においと経験則
コメント
環境
関数
一般
Java
名前
テスト
結論
参考文献
付録A 同時並行性II
クライアント/サーバーの例
結論
実行経路候補
さらに深層へ
ライブラリを知る
メソッド間の依存性が同時並行コードを破壊する
スループットを高める
デッドロック
マルチスレッドコードをテストする
マルチスレッドコードのテストのツールによるサポート
チュートリアル:コードサンプルの全体
付録B org.jfree.date.SerialDate
付録C 経験則のクロスリファレンス
後書き
索 引